<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        //设计模式: 在已有js语法的基础上, 进行语法整合(设计), 形成一个固定模式(用法), 每个设计模式都是为了解决某种问题.

        //其他设计模式: 工厂模式, 目的是为了批量创建对象.
        //设计模式一: 单例模式 , 为了实现只创建一个对象.

        //用立即执行函数包裹需要私有化的变量和函数, 同时又向外暴露一些接口; 利用了闭包的特性来保存已创建的对象.

        (function(){
            function Tank(){
                this.dom = null;//保存dom节点
                this.speed = 0;//速度
                this.color = '';//颜色
                this.run = function(){}
            }

            var instance = null;//保存实例化的对象
   
            function getInstance(){
                return instance || (instance = new Tank())
            }

            window.SingleTon = { getInstance };
            //给window对象添加一个属性( 将 SingleTon 暴露到外部)
            //window对象身上的所有属性 在使用的时候 都可以省略 window. 前缀
            
        })()

        var a = SingleTon.getInstance();
        var b = SingleTon.getInstance();
        var c = SingleTon.getInstance();

        console.log(a,b,c);
        console.log(a==b);
        console.log(a==c);
        console.log(b==c);
        


    </script>
</body>
</html>